package db

// // MongoClient mongo数据库连接对象
// type MongoClient struct {
// 	dbname string
// 	Sess   *mgo.Session
// 	Db     *mgo.Database
// 	ConStr string
// }

// // NewMongoClient 创建到服务器到连接
// func NewMongoClient(conf NoSQLDBConfig) *MongoClient {
// 	var conStr = "mongodb://"
// 	var dbname = ""
// 	if len(conf.User) > 0 {
// 		conStr += conf.User + ":" + conf.Pass + "@"
// 	}
// 	conStr += conf.Addr + ":" + conf.Port
// 	fmt.Println("connect mongo database : " + conStr)
// 	client, err := mgo.Dial(conStr)

// 	if err != nil {
// 		log.Fatal(err)
// 	}
// 	dbname = conf.DBName
// 	db := client.DB(dbname)
// 	return &MongoClient{dbname, client, db, conStr}
// }

// // ResetConnect 重连服务器
// func (c *MongoClient) ResetConnect() {
// 	fmt.Println("Reset mongodb Connection!")
// 	c.Sess.Refresh()
// 	c.Db = c.Sess.DB(c.dbname)
// 	// client, err := mgo.Dial(conStr)

// 	// if err != nil {
// 	// 	log.Fatal(err)
// 	// }

// 	// db := client.DB(dbname)

// 	// c.Sess = client
// 	// c.Db = db
// }

// // -------------查询数据相关----------------

// // Find 查询数据
// func (c *MongoClient) Find(tablename string, query bson.M) []interface{} {
// 	var table = c.Db.C(tablename)
// 	var data []interface{}
// 	err := table.Find(query).All(&data)
// 	if err != nil {
// 		fmt.Println(err)
// 		c.ResetConnect()
// 		return nil
// 	}
// 	return data
// }

// // FindOne 查询一条数据
// func (c *MongoClient) FindOne(tablename string, query bson.M) interface{} {
// 	var table = c.Db.C(tablename)
// 	var data interface{}
// 	err := table.Find(query).One(&data)
// 	if err != nil {
// 		fmt.Println(err)
// 		c.ResetConnect()
// 		return nil
// 	}
// 	return data
// }

// // Page 按分页查询
// func (c *MongoClient) Page(tablename string, query bson.M, sort bson.M, skip int, limit int) []interface{} {
// 	var table = c.Db.C(tablename)
// 	var data []interface{}

// 	pipeM := []bson.M{
// 		{"$match": query},
// 		{"$skip": skip},
// 		{"$limit": limit},
// 	}

// 	if len(sort) > 0 {
// 		pipeM = append(pipeM, bson.M{"$sort": sort})
// 	}
// 	var pipe = table.Pipe(pipeM)
// 	err := pipe.All(&data)
// 	if err != nil {
// 		fmt.Println(err)
// 		c.ResetConnect()
// 		return nil
// 	}
// 	return data
// }

// // Count 查询结果数量
// func (c *MongoClient) Count(tablename string, query bson.M) int {
// 	var table = c.Db.C(tablename)
// 	var q = table.Find(query)
// 	var count, err = q.Count()
// 	if err != nil {
// 		fmt.Println(err)
// 		c.ResetConnect()
// 		return -1
// 	}
// 	return count
// }

// // Distinct 查询所有键值
// func (c *MongoClient) Distinct(tablename string, key string, query bson.M) interface{} {
// 	var table = c.Db.C(tablename)
// 	var data interface{}
// 	err := table.Find(query).Distinct(key, &data)

// 	if err != nil {
// 		fmt.Println(err)
// 		c.ResetConnect()
// 		return nil
// 	}
// 	fmt.Println(data)
// 	return data

// }

// // GetIndexes 获取表格索引
// func (c *MongoClient) GetIndexes(tablename string) map[string][]string {
// 	var table = c.Db.C(tablename)
// 	indexes, err := table.Indexes()
// 	if err != nil {
// 		fmt.Println(err)
// 		c.ResetConnect()
// 		return nil
// 	}

// 	if len(indexes) == 0 {
// 		return nil
// 	}
// 	var data = make(map[string][]string)
// 	for _, value := range indexes {
// 		data[value.Name] = value.Key
// 	}

// 	return data
// }

// // GetByID 通过ID获取数据
// func (c *MongoClient) GetByID(tablename string, id interface{}) interface{} {
// 	var table = c.Db.C(tablename)
// 	var data interface{}
// 	err := table.FindId(id).One(&data)
// 	if err != nil {
// 		// fmt.Println(err)
// 		// c.ResetConnect()
// 		return nil
// 	}
// 	return data
// }

// // -----------------------处理数据相关--------------------------

// // SetIndex 设置索引
// func (c *MongoClient) SetIndex(tablename string, name string, keys []string) bool {
// 	var table = c.Db.C(tablename)
// 	err := table.EnsureIndex(mgo.Index{Name: name, Key: keys})

// 	if err != nil {
// 		fmt.Println(err)
// 		c.ResetConnect()
// 		return false
// 	}
// 	return true
// }

// // DropIndex 删除索引
// func (c *MongoClient) DropIndex(tablename string, name string) bool {
// 	var table = c.Db.C(tablename)
// 	err := table.DropIndexName(name)

// 	if err != nil {
// 		fmt.Println(err)
// 		c.ResetConnect()
// 		return false
// 	}
// 	return true
// }

// // Insert 插入数据
// func (c *MongoClient) Insert(tablename string, doc interface{}) (bool, error) {
// 	var table = c.Db.C(tablename)
// 	err := table.Insert(doc)

// 	if err != nil {
// 		fmt.Println(err)
// 		c.ResetConnect()
// 		return false, err
// 	}
// 	return true, err
// }

// // UpsertID 插入/更新数据
// func (c *MongoClient) UpsertID(tablename string, id interface{}, doc interface{}) error {
// 	var table = c.Db.C(tablename)
// 	_, err := table.UpsertId(id, doc)
// 	return err
// }

// // Delete 删除数据
// func (c *MongoClient) Delete(tablename string, query bson.M) error {
// 	var table = c.Db.C(tablename)
// 	_, err := table.RemoveAll(query)

// 	if err != nil {
// 		fmt.Println(err)
// 		c.ResetConnect()
// 		return err
// 	}
// 	return nil
// }

// // Update 更新数据
// func (c *MongoClient) Update(tablename string, query bson.M, data bson.M) (bool, error) {
// 	var table = c.Db.C(tablename)
// 	_, err := table.UpdateAll(query, data)

// 	if err != nil {
// 		fmt.Println(err)
// 		c.ResetConnect()
// 		return false, err
// 	}
// 	return true, err
// }

// // DeleteID 按ID删除数据
// func (c *MongoClient) DeleteID(tablename string, id interface{}) error {
// 	var table = c.Db.C(tablename)
// 	err := table.RemoveId(id)

// 	if err != nil {
// 		fmt.Println(err)
// 		c.ResetConnect()
// 		return err
// 	}
// 	return nil
// }
